package com.gbits.app.finance.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;

import com.gbits.app.finance.api.Page;

public interface IBaseDao<T> {
	// 基本数据变更操作
	public T create(T entity);
	public T update(T entity);
	public void remove(T entity);
    public void delete(List<T> objs);
    
    // 基本数据获取操作
	public T get(Serializable id);
	public T load(Serializable id);		
	public void load(T entityObject,Serializable id);
	
	// 基本数据查询操作
	
	/**
	 * @Title: findAll
	 * @Description: 全表查询
	 * @return
	 */
	public List<T> findAll();
	
	/**
	 * @Title: find
	 * @Description: 根据条件查询对象列表
	 * @param hql
	 * @param values
	 * @return
	 */
	public List<T> find(String hql, Object... values);
	
	/**
	 * 指定参数名查询
	 * @param hql
	 * @param map
	 * @return
	 */
	public List<T> findByNamesParameter(String hql, Map<String, Object> map);
	
	/**
	 * @Title: get
	 * @Description: 根据条件取单个对象
	 * @param hql
	 * @param values
	 * @return
	 */
	public T get(String hql, Object... values);
	
	/**
	 * @Title: getListForPage
	 * @Description: 分页查询
	 * @param hql
	 * @param offset
	 * @param length
	 * @return
	 */
	public List<T> getListForPage(final String hql, final int offset,final int length);
	
	/**
	 * @Title: getListByIds
	 * @Description: 根据id数组，取对象
	 * @param ids
	 * @return
	 */
	public List<T> getListByIds(final String ids);
	
	// hibernate 对应session操作
    public void flush();
    public void clear();
    public void refresh(T entityObject);
    public void evict(T entityObject);  
    public String toLike(String value);   
    
  
    // 分页查询
    public <T> Page<T> queryByPage(final Class<T> entityClass,
			final Criterion[] criterions, final Order[] orders,
			final Page<T> page);
    
    public <T> Page<T> queryByPage(final String queryString, final Map<String, Object> parameters, final Page<T> page);
}
